package net.zjitc.android2019.music;

import android.content.Intent;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import net.zjitc.android2019.R;
import net.zjitc.android2019.ch3storage.Ch3FileOuterActivity;

import java.io.File;
import java.util.ArrayList;

/**
 * 首页，音乐文件的展示：
 * 1、找到SD路径
 * 2、把所有mp3 lrc文件上传到SD路径
 * 3、读取SD路径下所有.mp3结尾的文件名，保存在集合
 * 4、把集合 展示在ListView
 */
public class MusicListActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
    ListView listView;

    /* SD路径*/
    String sdPath;
    /* MP3名称*/
    String mp3Name;
    /* 定义一个集合，保存mp3文件名*/
    ArrayList<Music> arrayList=new ArrayList<Music>();

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_music_list);
        listView=findViewById(R.id.music_listView_mp3list);
        /* 绑定点击事件*/
        listView.setOnItemClickListener(this);

        /* 动态申请权限:放在OnCreate方法*/
        String[] p={"android.permission.WRITE_EXTERNAL_STORAGE","android.permission.READ_EXTERNAL_STORAGE"};
        ActivityCompat.requestPermissions(this,p,1);

        /* 1、获得SD路径,版本的原因，storage/emulated/0 权限拒绝
        *  2、将所有Mp3和lrc文件上传sdcard目录*/
        sdPath=Environment.getExternalStorageDirectory().getPath();
        Log.v("music",sdPath);

        /*3、读取SD路径下所有.mp3结尾的文件名，保存在集合:
         * 1）以sd路径为参数，构造File对象
          *2）列出该File对象的所有文件和文件名
          * 3）过滤以.mp3结尾的文件
          * 4）把.mp3文件加到集合*/
        File f=new File(sdPath);
        File[] files=f.listFiles();
        for (int i=0;i<files.length;i++){
            /* 获得文件名，判断是否以.mp3结尾*/
            if(files[i].getName().endsWith(".mp3")){
                Music music=new Music();
                mp3Name=files[i].getName();
                music.setMp3Name(mp3Name);
                arrayList.add(music);
            }
        }
        /*  4、把集合 展示在ListView: 需要适配器Adapter:
         *  列表项中若只有一个TextView，可以使用ArrayAdapter
          * 若列表项比较复杂，还有按钮之类的，就要使用BaseAdapter（重写4个方法）*/
        /* 参数1：上下文对象；  参数2：列表项的布局文件id
        *  参数3：布局文件内的TextView的id
        *  参数4：TextView要展示的内容数据List*/
        ArrayAdapter adapter=new ArrayAdapter(this,R.layout.activity_music_item,R.id.music_item_tv,arrayList);
        listView.setAdapter(adapter);
    }

    /**
     * ListView点击事件：跳转到播放界面
     * @param parent
     * @param view
     * @param position 代表点击的是第几个列表项
     * @param id
     */
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        /* 跳转到播放界面，同时传递参数：mp3文件名，路径*/
        Intent intent=new Intent(this,MusicPlayActivity.class);
        /* 点击的列表项 跟 集合 是一一对应，
        *  获取点击的列表项的mp3文件名*/
        mp3Name=arrayList.get(position).getMp3Name();
        intent.putExtra("mp3Name",mp3Name);
        intent.putExtra("sdPath",sdPath);
        startActivity(intent);

    }
}
